<?php

namespace Ararat\ProductoBundle\Entity;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
use Doctrine\ORM\Mapping as ORM;
/**
 * Description of ProductoPropiedad
 *
 * @author daniel
 * @ORM\Entity
 */
class ProductoPropiedad implements ProductoPropiedadInterface
{
 
    /**
     *
     * @var integer
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     *
     * @var ProductoInterface
     * @ORM\ManyToOne(targetEntity="Ararat\ProductoBundle\Entity\Producto", inversedBy="propiedades")
     * @ORM\JoinColumn(name="producto_id", referencedColumnName="id", nullable=false) 
     */
    protected $producto;
    /**
     *
     * @var PropiedadInterface
     * @ORM\ManyToOne(targetEntity="Ararat\ProductoBundle\Entity\Propiedad")
     * @ORM\JoinColumn(name="propiedad_id", referencedColumnName="id", nullable=false)
     */
    protected $propiedad;
    /**
     *
     * @var String
     * @ORM\Column(type="string", length=50) 
     */
    protected $valor;
    
    public function __toString() {
        return $this->valor;
    }
 
    public function getId(){
        return $this->id;
    }

    public function getProducto() {
        return $this->producto;
    }

    public function setProducto(ProductoInterface $producto = null) {
        $this->producto = $producto;
        return $this;
    }

    public function getPropiedad() {
        return $this->propiedad;
    }

    public function setPropiedad(PropiedadInterface $propiedad) {
        $this->propiedad = $propiedad;
        return $this;
    }

    public function getValor() {
        if ($this->propiedad && TiposDePropiedades::CHECKBOX === $this->propiedad->getTipo()) {
            return (boolean) $this->valor;
        }
        return $this->value;
    }

    public function setValor($valor) {
        $this->valor = $valor;
        return $this;
        
    }

    public function getNombre() {
        $this->assertPropertyIsSet();
        return $this->propiedad->getNombre();
    }
    
    public function getPresentacion() {
         $this->assertPropertyIsSet();
         return $this->propiedad->getPresentacion();
    }
    
    public function getTipo() {
         $this->assertPropertyIsSet();
         return $this->propiedad->getTipo();
    }
    
    public function getConfiguracion() {
         $this->assertPropertyIsSet();
         return $this->propiedad->getConfiguracion();
    }
    
    protected function assertPropertyIsSet(){
        if (null == $this->propiedad){
            throw new \BadMethodCallException('La propiedad no ha sido creado todavia');
        }
    }

}

?>
